SHOT BREAKDOWN
Blood

00:05 - 00:27 | HOUDINI: Flip Simulation
A project I worked on at Elastic as FX artist. My role was to create blood simulation and manipulate them to how Art Director wanted them to be.  The tool I was using was SideFX's Houdini. This project was tricky, because the blood needed to behave like blood, but still needed to be able to move to and from we dictated them to in the set amount of time it was required per shot. The blood simulation is Flip simulation, and I created custom forces to help control this, and cheated it with timewarp in some cases.

Blood simulations were exported as alembic to be rendered in Maya by Elastic's lighting team. Huge thanks to everyone involved at Elastic. This project was a team effort, and I couldn't have made this look as good by myself.  
------------------------------------------------------------
Tire Dust

00:27 - 00:29 | HOUDINI: Pyro Simulation
A project I worked on as FX Artist at Elastic. This project is very straight forward, it was just to make sand dust from tires as cars drove through different terrains. I made a few more tire dust simulations for this project as well, but it was more for background elements here and there, and they weren't as exciting to show as this one. 

As far as I remembered, I extracted the tires from the model, remesh and use ray sop to flatten them to the ground. Then I scattered some points on it and use point vop to create random velocity added onto its original velocity, and use these to emit dust trail coming off from those tires. Lastly, I used the car as collider. Pretty straight forward. This set up was used on other cars as well, but I don't remember which one.
------------------------------------------------------------
Fracturing, Demolition, Dust, Debris, Splinters
00:29 - 00:38 | HOUDINI: Fracturing, Rigid Body Simulation, Pyro Simulation, POP Particles
Fun and exciting project at A52! Who doesn't love wrecking things digitally?? My role in this project as FX Artist was to create procedural floor, fracturing, and create demolition simulation different shots.

My shots are from Top down angle shots, and side shots. What this meant was that I needed to find a way to procedurally create floor with different layers of materials. I asked for measurement for the wood plank they had at studio location, this way, our digital floor will match with the live action plate. From there I created procedural floor with layers of wood, concrete, and drywall. I created a set up where I could dictate how many floor I wanted to create simulation for, and each floor will have different wood tile lay out. I created UV for wood, concrete, and drywall, and randomly assigned group to wood pieces, in order to make it easier for lighting team to create randomness in wood materials. 

I created fractured pieces from these using RBD Material Fracture node. I created Rigid Body Simulation and used the moving pieces to create Pyro simulation for dust, creating debris from inside faces of fractured concrete and splinters from wood pieces by using pop particles. I created vdb from animated geometry, and used that as condition in simple VEX to create active areas for where breaking wood should happen.  This simple thing helped my set up to be more flexible and allowed our Art Director to dictate timing, direction, and amount of destruction to the floor. 

Once our director was happy with the simulations, geometries were exported as Alembic, and dust were exported as vdb, they were rendered in Maya by A52 lighting team.
------------------------------------------------------------
Falling Snow, Volumetric Snow Mist, Ice Chunks
00:38 - 00:44 | HOUDINI: Pyro Simulation, Pop Particles, Mantra
My role is this project as FX artist was to create snow simulation and ice chunk. The simulations were pretty straight forward, falling snow with Pop particles, and create volumetric part with Pyro Simulation. Instead of sphere, I used more complex geometries for particle instances to create more interesting motion blur streaks in falling snow flake simulations. 

To optimize simulation time for a shot where the car emerged from volumetric snow, the simulation were divided into 3 parts for background area, middle ground area, and foreground area. This allowed me to iterate quickly as we could dictate when and where we want more or less detail without creating new simulation for all of them, since the area of simulation was rather large, by divide it to 3 separate areas, I could create high resolution simulation within reasonable time and cost. I also created snow mist particles by advecting pop particles onto vel channel in Pyro Simulation. I also used VEX to make pscale for particles that were further in the back to be larger than the ones in front, this way those snow particles in the back could be more visible when rendered.

It has been a while, but if I recall correctly, I rendered these in Mantra.
------------------------------------------------------------
Nebula Animation
00:45 - 00:49 | HOUDINI: Flip Simulation
My role in this project was creating layout of nebula cluster using still frames of nebula VDB assets Elastic bought. I created custom forces and used them to manipulate and create animations from these VDB assets.  Once the simulations were ready, I exported them as VDB again to be rendered in Maya.
------------------------------------------------------------
Water Beads, Water Splashes, Water Crown Splash, Ripple

00:49 - 00:57 | HOUDINI: Vellum Simulation, Flip Simulation
My role here was to create fluid simulations for water splashes, and create water beads with vellum simulation. It was an interesting project where I had an opportunity to develop my set up from this project into an HDA for creating customize water crown later on. But at this point in time, I was just creating a set up where I created custom forces for the crown and expose some controls to manage surface tensions and filling particles to the holes created by flip simulation. I was very happy with the result, and I owed it to Houdini and FX community on the internet for the looks of this fluid simulation I was able to create. 

WATER SPLASH

To optimize and improve my set up, I used custom surface tension based on Mean Curvature Flow from Alejandro Echeverry:


And I created custom reseeding to fill in the gaps you usually get from fluid simulation, and made it so that I could retime it later. I did it based on this video on youtube:
https://www.youtube.com/watch?v=KNXHqEN11zE

CROWN FORCE

I took an idea from Realflow's Crown Daemon tool:
https://www.youtube.com/watch?v=mdcgV2XVsAk

I loved how the control looks from Realflow's Crown Daemon tool, and how you can roughly visualize what the crown was going to look like.

I created my force by create a circle and duplicate it, I offset one to be higher than the other, and for the top one, I used point vop to create ramp by normalizing number of points. I divided point number by number of points, and I get 0 to 1 values for each of the point, where 0 is the beginning of the curve, and 1 is the end of the curve. With this information, I created a spline ramp, and started drawing what my crown should look like. Lastly, I calculated vector between each points on those two circles, created a multiplier, and output it as velocity I could use to drive flip simulation. Combining this force with custom surface tension from Alejandro's vimeo, and custom reseeding and retiming from youtube video, I got a pretty robust system where I could easily create and control water crown that I could retime later without simulating again.  
At this point, this tool wasn't as developed yet, and I had to redraw the force every time I wanted to make some changes. Later on, I created a system where it was easier to make changes to its shape and developed it into an HDA for other artist to use.
WATER BEADS

They were created with Vellum Solver. Vellum was very powerful and I could create and revise those water beads easily. I took notes from Tim van Helsdingen videos on youtube when he released videos on Vellum Fundamentals. These are really good resources for anyone wanting to start doing Vellum simulation as he explained and showed the process very clearly:

https://www.youtube.com/watch?v=n6RYQFBPsR0

An extra step I did to give it more life was to create a secondary deformation on each of them when they came together and collide to one another. This was done using Sop Solver. I used Sop Solver to create an age attribute that generated from Cd. When one water bead (in black color) collided with the rest of the beads (these would have white color), white color from the rest of the beads were transferred to the isolated bead using attribute transfer and some VEX. By running this set up through sop solver, it will create a growing color patch starting from point of contact, where any surface that has color information more than 0.1 value will get increasing age attribute. Then I created a color ramp based on the age attribute, and used it to drive displacement in point vop.  
As this is Houdini, I'm sure there's a better way to approach this, but this was all I could think of at the time. 
------------------------------------------------------------
Ocean Simulation, Foam, White Water Spray, Volume Mist, Particle Mist, Underwater Foam
00:57 - 01:00 | HOUDINI: Flip Simulation, Pyro Simulation, Pop Particles, Rendered in Mantra
An R&D I collaborated with another artist, he provided me with animation for iceberg flipping and simple scene set up in Maya. We were doing this as part of our learning experience about ocean simulation, white water, and proper workflow from Houdini to Maya. However, before this R&D was completed, I was laid off first, I have another version with better simulation, but it was not completed because I still hadn't worked on materials for foreground elements. 

I watched Rebelway videos my friend bought about how to approach this, and I totally recommended it to anyone. I learned many things about ocean simulation, such as the tricks in how to make it seems "infinite", or how VDB analysis node helped calculating length of a vector, create gradient color from attribute, calculating curl, or creating vorticity from calculated curl, I also learned how to use vop to displace the foam to ocean spectrum. To get this to be very high resolution and simulated it in a reasonable amount of time, I learned how to set up distributed sim over the network. Going through this made me understand the process and smaller little things about Houdini so much more.

OCEAN SURFACE

I learned this trick in how to set up the edge of the flip tank to be flat by using either VEX or vop. I created a VDB volume to use as mask for drag force during simulation, the drag force increased to be higher amount around the area closer to the edge, in addition to global drag force I applied to the whole simulation. I did this because I did not want the wave and water displacement from iceberg animation to reach the edge of the tank. I wanted the edge of the tank to be as flat as possible.

I also used VDB analysis to calculate length of vel, curl, and vorticity from flip fluid, as flip simulation is volume, calculation for this has to be done as volume, and VDB analysis is perfect for that. With this information, I could create a volume mask for where action happened, with this mask, I used it as mask when I wanted to apply VDB smooth on the surface before I converted it to geometry. I removed the edge and bottom area of the geometry in order to get just an ocean surface. Then I transferred velocity and vorticity attributes from flip particles onto this geometry, and I used this information to create a mask for where I should apply ocean spectrum displacement to. I also exported this as Cd attribute when I baked out Alembic for lighter to apply different color of ocean to the exported surface.

WHITE WATER

I removed particles part from flip simulation and used just the "surface", and "vel" for whitewater source. However, I felt that I didn't get enough of white water from this, so I removed droplet part of flip particles, and use point vop to get area with high velocity and vorticity of the sim as additional source of white water emission. I created couple custom forces using POP VOPs, one to manipulate particle's velocity based on depth, and another one to apply noise based on depth. Once the particles were cached, I used VDB analysis on the cached flip simulation to create mask based on velocity and vorticity, and I used that mask in VOP to displace those white water particles along with the ocean spectrum. With this method, the particles would be displaced only in the same area as the ocean surface.
VOLUME MIST AND TINY DROPLET PARTICLES

Similar to how I created additional emission source for white water, I created pyro source from isolating particles with high value of velocity and vorticity. Only the fast moving particles will create volume mist, in this case, these particles will be just the ones colliding with iceberg, and some of the fast moving waves created from that interaction. I used pyro simulation to created falling water mist, and used tricks found in this article to help remove mushroom-ness from my simulation:


Once I was happy with the mist simulation, I advected pop particles to vel from pyro simulation to create tiny mist particles. I randomized pscale based on particles' IDs before I exported them as alembic for lighter.

WETMAP

Creating wetmap was by far the easiest part in all these processes. I did it using Sop Solver. The only thing about this process was that I had to use displaced ocean geometry because I wanted my wetmap to be created from that. I used VEX to isolate displaced ocean geometry only area closer to the iceberg and I removed whatever further out. I used Ray Sop to move points from ocean geometry to be on iceberg surface, then scatter points on it. I gave black color to iceberg, and white color to these scattered points, then I transferred the white color onto iceberg geometry. Then I used Sop Solver to create wetmap based on transferred color.

Once that's done, I exported this out as a texture by using COP Network.
------------------------------------------------------------
Fracturing, Demolition, Dust, Debris
01:00 - 01:05 | HOUDINI: Rigid Body Simulation, Pyro Simulation, Pop Particles
This project I did at Elastic was more difficult than it needed to be. The main obstacle we faced in this project was that we were trying to render the whole thing in C4D octane. Because of this, I had to be aware of how many particles and polygons I could export for them. 

The simulation part was easy enough (fracture the mountain with RBD Material Fracture, Create RBD simulation, use custom attributes to help with secondary fracturing, create pyro simulation for dust, create particle debris, advect particles to dust simulation for tiny particles.

At the time, there was a bug when importing Alembic to C4D that we were not aware of, and the renders flickered when we distributed on the farm. (We learned this after Elastic engineer took a look at the project and found that out.) In the end, we brought in help from a senior C4D artist, and we were able to get this project out in time. I created different colors for inside and outside faces of the mountain, and saved it as vertex map for C4D artist, he used that to create emissive material for the inside glowing part of the render. 

With that said, after this project was over, I created videos documenting proper workflow on how to render motion blur from imported alembic:


And how to transfer attributes from particles exported from Houdini to Thinking Particles in C4D AND render them in Octane:


I also wrote a documentation on how to do it for Elastic's internal Wiki page, for the next artists who may run into similar issues as I did.
------------------------------------------------------------
Snow Simulation

01:05 - 01:10 | HOUDINI: POP Grain
This project was created when I just started using Houdini many years ago. Thank you very much to Elastic and to Kirk Shintani for the opportunity to do this job, and to Jun Kim, the Sr. FX Artist there, who helped teaching me Houdini when I started. Also huge thank you to lighting team and compositing team at Elastic, they truly did wonderful job on this one.

I did this project using Pop Grain. I used SOP Solver to create a growth propagation to help create an active area for the snow.  I used point VOP and noises to create different patterns for "attractionweight" attribute, which I used that to control clumping of the snow, I created keyframes for them to transition between large clump to smaller clump. Furthermore, I created rest attribute before running simulation.
As mentioned earlier, I used attractionweight attribute as weight for clumping, what this meant was anything in black color will have 0 weight, and once they were set to be active, they would fly off as stray particles that weren't clump together. 

I manipulated this attractionweight further by finding number of particle's neighboring points with sop solver and pop wrangle inside the DOP, and like this, particles that were on the "edge" of the logo would be affected first by forces applied to it. I also set up a force multiplier based on distance of the pivot of the logo, the further away they were from the original, the more force would be applied to them. This was used as multiplier for Pop force's noise amplitude.

Then I created 10 more particle passes based on the original simulation I cached. However, I offset them a little bit by using rest attribute and turbulent noise in VOP. 
Then I gave them new IDs and randomize their pscale before I exported those particles to be rendered in Maya.
​​​​​​​Falling Snow Flakes, Volumetric Snow Mist
01:10 - 01:16 | 3DSMAX: FumeFX, Particle Flow
As I was rather new to Houdini, I wasn't as confident that I could get Pyro Simulation to work in time, I went back to trusty 3DSMAX to create these falling snow flakes with Particle Flow, and used FumeFX to create volumetric snow storm and mist. This was probably the last project I worked in 3DSMAX. I saved them out as VDBs and rendered them with Vray in Maya.
------------------------------------------------------------
R&D: HDA WATER CROWN TOOL
12 Water Crown Simulations
01:16 - 01:21 | HOUDINI: Flip Simulation, Mantra
An HDA I developed after Neutrogena project I did earlier in that year. I improved this by using more math instead of hand drawing the force. I could probably do all this in VEX but because I was going to add some noise on the curve, I decided to just do this in VOP instead. Anyway, learning from my past project, I know that I could create a crown force by subtracting each point's position on two circles. With this knowledge, I knew that I wanted my curve to have upward "peaks" where I wanted my particle to travel further than other area, I created these peaks with simple math:

-(abs(sin(x*3.14)))+1 

where x is (point number / number of points)

But why 3.14? Because multiplying x with with a pi will get you result like this:
I used this math in point vop and exposed some parameters to get something like this:
You can also do the same thing in VEX, but I still rather use point vop to add noise onto the curve:
In addition to Alejandro's mean curvature flow tension force and fill holes I mentioned earlier, I also use VEX to calculate number of neighboring points and velocity of the particles and create color ramp. I also created a ramp based on particle age, and I used that to control the amount of force being applied to the particles. I could probably just keyframe the force amplitude, but I wanted to try to make this as procedural as possible, so I did it like that. Color ramp I got from number of neighboring points were used later while I created mesh for the cached simulation. The area where there's more number of neighboring points is usually around the leading edges of the crown:​​​​​​​
I set my pscale for the particles in that area to be a little higher than other area to make them thicker than other area when I created mesh for it.
Once my HDA was completed, I created 12 different variety of crown splashes and rendered them in Mantra.
------------------------------------------------------------
12 Aerial Splash Simulations
01:21 - 01:25 | HOUDINI: Flip Simulation, Mantra
I tweaked my set up from creating crown splash and created a simple set up for adjustable noise force in point vop to create this variety of 12 aerial splashes. Rendered in Mantra
------------------------------------------------------------
7 Underwater Bubble Simulations
01:25 - 01:28 | Flip Simulation
R&D I did while I was with A52, my goal was to try to create a set up where I can make realistic bubble. The trick to this was to use custom attribute for density. I created a flip tank for the main volume of water, and emit bubble from additional flip source. Both of these sources had different custom density amount. Since the bubble was emitted with lower density than main flip tank, it got push upward and started to break apart after a while.

I used VEX to create color ramp based on particles' number of neighboring points. Once they started to leave the main body of the bubble, they would have less number of neighboring points, after they reached a certain threshold, I moved them to a different group via VEX. Then I created mesh to the main body of bubble, and for the smaller bubbles, I used copy a sphere to those points, and tapered off their pscale by creating a ramp based on particles age.  
------------------------------------------------------------
FX reel 2024
Published:

Owner

FX reel 2024

Published:

Creative Fields